"use strict";
const common_vendor = require("../../common/vendor.js");
const utils_index = require("../../utils/index.js");
const { getCachedAnalysisResult, cacheAnalysisResult } = utils_index;
const __unplugin_components_1 = () => "../../node-modules/wot-design-uni/components/wd-button/wd-button.js";
const __unplugin_components_0 = () => "../../node-modules/wot-design-uni/components/wd-icon/wd-icon.js";
if (!Array) {
  const _component_wd_icon = __unplugin_components_0;
  const _component_wd_button = __unplugin_components_1;
  const _component_layout_default_uni = common_vendor.resolveComponent("layout-default-uni");
  (_component_wd_icon + _component_wd_button + _component_layout_default_uni)();
}
const _sfc_main = /* @__PURE__ */ common_vendor.defineComponent({
  __name: "index",
  setup(__props) {
    const imageList = common_vendor.ref([]);
    const fileObj = common_vendor.ref(null);
    const imageBase64 = common_vendor.ref("");
    const imageFormat = common_vendor.ref("jpeg");

    // 进度条相关状态
    const isLoading = common_vendor.ref(false);
    const progressValue = common_vendor.ref(0);
    const progressText = common_vendor.ref("准备分析中...");

    // 更新进度条
    function updateProgress(value, text) {
      progressValue.value = value;
      progressText.value = text;
    }
    function chooseImage() {
      if (typeof window !== "undefined") {
        const input = document.createElement("input");
        input.type = "file";
        input.accept = "image/*";
        input.onchange = (e) => {
          var _a;
          const target = e.target;
          if (target.files && target.files[0]) {
            const file = target.files[0];
            fileObj.value = file;
            const tempUrl = URL.createObjectURL(file);
            imageList.value = [tempUrl];
            const fileName = file.name;
            const extension = (_a = fileName.split(".").pop()) == null ? void 0 : _a.toLowerCase();
            imageFormat.value = extension === "png" ? "png" : extension === "webp" ? "webp" : "jpeg";
            const reader = new FileReader();
            reader.onload = function(e2) {
              if (e2.target && e2.target.result) {
                imageBase64.value = e2.target.result;
                // console.info("H5环境图片Base64前50字符:", imageBase64.value.substring(0, 50));
              }
            };
            reader.readAsDataURL(file);
          }
        };
        input.click();
      } else {
        common_vendor.index.chooseImage({
          count: 1,
          success: (res) => {
            var _a;
            const tempFilePaths = res.tempFilePaths;
            imageList.value = tempFilePaths;
            const filePath = tempFilePaths[0];
            const extension = (_a = filePath.split(".").pop()) == null ? void 0 : _a.toLowerCase();
            imageFormat.value = extension === "png" ? "png" : extension === "webp" ? "webp" : "jpeg";
            common_vendor.index.getFileSystemManager().readFile({
              filePath,
              encoding: "base64",
              success: (result) => {
                imageBase64.value = `data:image/${imageFormat.value};base64,${result.data}`;
                //console.info("小程序环境图片Base64前50字符:", imageBase64.value.substring(0, 50));
              },
              fail: (error) => {
                console.error("图片转base64失败:", error);
              }
            });
          }
        });
      }
    }
    function removeImage() {
      imageList.value = [];
      fileObj.value = null;
      imageBase64.value = "";
    }
    async function startBeautyTest() {
      if (utils_index.checkUsageLimit()) {
        common_vendor.index.showToast({
          title: "今日使用次数已达上限，请明天再来",
          icon: "none",
          duration: 3e3
        });
        return;
      }
  
      if (imageList.value.length === 0) {
        common_vendor.index.showToast({
          title: "请上传照片",
          icon: "none"
        });
        return;
      }
      if (!imageBase64.value) {
        common_vendor.index.showToast({
          title: "图片加载中，请稍候",
          icon: "none"
        });
        return;
      }
      
      try {
        // 先检查是否有缓存的分析结果
        const cachedResult = getCachedAnalysisResult(imageBase64.value);
        if (cachedResult) {
          // console.info("使用缓存的分析结果");
          // 直接使用缓存结果，不需要增加使用次数
          await common_vendor.nextTick$1();
          common_vendor.index.navigateTo({
            url: `/pages/beauty-test/result?result=${encodeURIComponent(JSON.stringify(cachedResult))}`
          });
          return;
        }
        
        // 显示进度条
        isLoading.value = true;
        updateProgress(0, "准备分析中...");
  
        updateProgress(20, "开始人脸检测...");
        // console.info("开始人脸检测");
        const faceDetectionResult = await utils_index.callDoubanApi([
          {
            "role": "system",
            "content": '你是一个专业的图像分析专家，任务是判断图片中是否包含真人头像。请严格按照以下要求进行分析：\n1. 如果图片中明显包含至少一个清晰的真人头像，请返回：{"hasHumanFace": true}\n2. 如果图片中不包含真人头像，或者无法清晰识别出真人头像，请返回：{"hasHumanFace": false}\n3. 请严格按照JSON格式返回，不要添加额外文字。'
          },
          {
            "role": "user",
            "content": [
              {
                "type": "text",
                "text": "请判断这张图片中是否包含真人头像"
              },
              {
                "type": "image_url",
                "image_url": {
                  url: imageBase64.value
                }
              }
            ]
          }
        ]);
        // console.info("人脸检测结果:", faceDetectionResult);
        const faceDetectionResponse = faceDetectionResult.choices[0].message.content;
        // console.info("人脸检测AI回答:", faceDetectionResponse);
        let faceDetectionData;
        try {
          faceDetectionData = JSON.parse(faceDetectionResponse);
        } catch (e) {
          // console.error("人脸检测结果解析失败:", e);
          common_vendor.index.showToast({
            title: "人脸检测失败，请重试",
            icon: "error"
          });
          return;
        }
        if (!faceDetectionData.hasHumanFace) {
          common_vendor.index.showToast({
            title: "请上传有效的真人头像",
            icon: "none",
            duration: 3e3
          });
          return;
        }
  
        updateProgress(40, "人脸检测通过，开始颜值分析...");
        // console.info("人脸检测通过，开始颜值分析");
        const result = await utils_index.callDoubanApi([
          {
            "role": "system",
            "content": '你是一个专业的形象美学分析师，拥有多年的面部特征分析经验。请根据用户提供的人物照片，进行全面、专业、有说服力的颜值分析，并按照以下JSON格式返回结果：\n{"score": 颜值总分, "confidence": 分析可信度, "type": "颜值类型", "typeDescription": "颜值类型详细描述", "faceShape": "脸型分析描述", "detailedAnalysis": {"facialSymmetry": 面部对称性得分, "skinQuality": 皮肤质量得分, "facialFeatures": [{"name": "五官名称", "score": 得分, "description": "详细描述"}, ...], "overallImpression": "整体印象描述"}, "advantages": ["优点1", "优点2", ...], "suggestions": ["建议1", "建议2", ...], "quote": "美学名言", "author": "作者"}\n\n分析要求：\n1. 颜值总分范围为0-100，保留整数，基于科学的面部美学标准综合评估。\n2. 分析可信度为70-100的整数，表示对本次分析的自信程度。\n3. 颜值类型需专业且有辨识度，如：优雅气质型、阳光活力型、知性睿智型、古典东方型等。\n4. 脸型分析需详细描述面部轮廓特征，包括脸型判断依据。\n5. 详细分析需包含：\n   - 面部对称性（0-100的整数）：评估左右脸的对称程度\n   - 皮肤质量（0-100的整数）：评估肤色均匀度、光滑度等\n   - 五官分析：至少包含眼睛、鼻子、嘴巴、眉毛、脸型五个方面，每个方面都要有具体得分（0-100）和详细描述，注意五官得分不要过于平均，要有区分度\n   - 整体印象：综合评价人物的气质、魅力等\n6. 颜值优势需列出3-5条具体的优点，每条不超过50字。\n7. 提升建议需列出2-4条实用、具体的改善建议，每条不超过50字。\n8. 美学名言：请根据照片中人物的面部特征、气质和颜值类型，选择一句与之高度匹配的美学名言，确保名言能够很好地呼应分析结果和人物特点，避免使用通用名言。\n9. 所有分析内容需具体、有依据、专业，避免笼统描述，让用户觉得分析有理有据、可信度高。\n10. 请严格按照JSON格式返回，不要添加额外文字。'
          },
          {
            "role": "user",
            "content": [
              {
                "type": "text",
                "text": "请根据专业的面部美学标准，对这张照片中的人物进行全面、详细的颜值分析，包括各项具体得分和专业解读。请特别注意：五官得分要有区分度，不要过于平均；并根据人物特点选择一句高度匹配的美学名言。"
              },
              {
                "type": "image_url",
                "image_url": {
                  url: imageBase64.value
                }
              }
            ]
          }
        ]);
        // console.info("颜值分析结果:", result);
        const aiResponse = result.choices[0].message.content;
        // console.info("AI回答:", aiResponse);
        
        updateProgress(80, "解析分析结果...");
        // 解析AI响应并缓存结果
        let analysisResult;
        try {
          analysisResult = JSON.parse(aiResponse);
          // 缓存分析结果
          cacheAnalysisResult(imageBase64.value, analysisResult);
        } catch (e) {
          console.error("解析AI响应失败:", e);
        }
        
        updateProgress(100, "分析完成！");
        utils_index.increaseUserUsageCount();
        await common_vendor.nextTick$1();
        common_vendor.index.navigateTo({
          url: `/pages/beauty-test/result?result=${encodeURIComponent(aiResponse)}`
        });
      } catch (error) {
        console.error("分析失败:", error);
        common_vendor.index.showToast({
          title: "分析失败，请重试",
          icon: "error"
        });
      } finally {
        // 无论成功或失败，都重置进度条状态
        isLoading.value = false;
        progressValue.value = 0;
        progressText.value = "准备分析中...";
      }
    }
    function navigateBack() {
      // 清空图片数据
      removeImage();

      // 检查页面栈，如果只有一个页面则返回首页，否则正常返回
      const pages = getCurrentPages();
      if (pages.length === 1) {
        // 如果是首页，跳转到首页（虽然应该不会出现这种情况）
        common_vendor.index.switchTab({
          url: '/pages/index/index'
        });
      } else {
      common_vendor.index.navigateBack();
    }
    }
    return (_ctx, _cache) => {
      return common_vendor.e({
        a: common_vendor.p({
          name: "arrow-left",
          size: "20px"
        }),
        b: common_vendor.o(navigateBack),
        c: common_vendor.p({
          name: "alert-circle",
          size: "16px",
          color: "#36D399"
        }),
        d: imageList.value.length === 0
      }, imageList.value.length === 0 ? {
        e: common_vendor.p({
          name: "upload",
          size: "60rpx",
          color: "#ccc"
        })
      } : {
        f: imageList.value[0],
        g: common_vendor.p({
          name: "close",
          size: "24rpx",
          color: "#fff"
        }),
        h: common_vendor.o(($event) => removeImage())
      }, {
        i: common_vendor.o(chooseImage),
        j: common_vendor.o(startBeautyTest),
        k: common_vendor.p({
          type: "primary"
        }),
        l: isLoading.value,
        m: progressValue.value,
        n: progressText.value
      });
    };
  }
});
const MiniProgramPage = /* @__PURE__ */ common_vendor._export_sfc(_sfc_main, [["__scopeId", "data-v-50c36d42"]]);
wx.createPage(MiniProgramPage);
